/**
 * 给定数组，数组元素还有红蓝二色
 * 可以选择相邻的颜色不同的两个位置，将其元素和记作得分，记过分的不能再用
 * 问最多得分是多少
 * 令Di是到i位置的最大得分，则i位置只有选和不选两种选择，在可选情况下
 * Di = max(D[i-1] + D[i-2]+A[i]+A[i-1])
 * 不可选情况下 
 * D[i] = D[i - 1]
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;


using llt = long long;
using Real = double;
using vi = vector<int>;
using pii = pair<int, int>;

int N;
vi A;
string S;

llt proc(){
    vector<llt> D(N + 1, 0LL);

    for(int i=2;i<=N;++i){
        auto & di = D[i];
        di = D[i - 1];

        if(S[i - 1] != S[i - 2]){
            di = max(di, D[i - 2] + A[i] + A[i - 1]);
        }
    }

    return D[N];
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> N;
        A.assign(N + 1, {});
        for(int i=1;i<=N;++i) cin >> A[i];
        cin >> S;
        cout << proc() << "\n";
    }
    return 0;
}